package siestageek.swing;

import java.awt.Font;
import java.awt.Menu;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

// 메뉴 작성법
// JMenuBar -> JMenu -> JMenuItem
public class SwingMenu extends JMenuBar {
	
	private JMenu mnFile = null;	// 파일
	private JMenu mnEdit = null;	// 편집
	private JMenu mnView = null;	// 보기
	private JMenu mnTool = null;	// 도구
	private JMenu mnWnd = null;	// 창
	private JMenu mnHelp = null;	// 도움말
	
	private static SwingMenuActionListener mnal = null;
	
	public SwingMenu() {
		mnal = new SwingMenuActionListener();
		makeMenu();
		makeMenuItem();
		addShortCut();
		addMenu();
	}

	// 메뉴바에 추가할 메뉴를 생성함
	private void makeMenu() {
		mnFile = new JMenu(" 파 일(F) ");
			// mnFile.setFont( new Font("맑은 고딕", Font.BOLD, 14) );
			// 메뉴 글꼴 변경을 위해 setFont 메서드 사용
			// 하지만, 모든 메뉴와 메뉴항목에 setFont를 
		    // 사용하는 것은 무척 번거로운 일임
			// 폰트를 다른 것으로 바꾸기라도 한다면.... ㅠㅠ
			// 따라서, 프로그램 전체 글꼴을 변경하는 방법을 이용
			// main 메서드에서 FontUIResource 이용함
		mnHelp = new JMenu(" 도움말(H) ");
	}
	
	// 메뉴항목에 단축키 지정
	private void addShortCut() {
		mnFile.setMnemonic( KeyEvent.VK_F );
	}
	
	// 생성 및 설정된 메뉴를 메뉴바에 추가
	private void addMenu() {
		add( mnFile );
		add( mnHelp );
	}
	
	// 메뉴에 추가할 메뉴항목menuitem 생성
	// 배열이 이용하면 쬐끔(?) 편해짐
	private JMenuItem makeMenuItems(
			String text, String img, int skey, 
			boolean off, int akey ) {
		
		String icon = null;	// 메뉴에 쓸 아이콘
		if ( img != null )		// 아이콘이미지가 있으면
			icon = "/images/menu/" + img + ".png";
		
		JMenuItem mnitem = null;	// 메뉴 항목
		try  {
			mnitem = new JMenuItem(text,
				new ImageIcon( 
						getClass().getResource(icon) )	);
		} catch (Exception ex) {
			mnitem = new JMenuItem(text);
		}
		
		mnitem.setEnabled( off );	// 메뉴 활성/비활성
		mnitem.setMnemonic( skey );
		mnitem.setAccelerator( 
				KeyStroke.getKeyStroke( akey , 
				ActionEvent.CTRL_MASK) );	// 단축키
		
		// 이벤트 처리관련 메서드 등록
		mnitem.addActionListener( mnal );
		mnitem.setActionCommand( img );
		
		return mnitem;
	}
	
	// 메뉴에 메뉴항목 추가
	private void makeMenuItem() {
		mnFile.add( makeMenuItems( "  새 파일(N)          ", "new", KeyEvent.VK_N, true, KeyEvent.VK_1) );
		mnFile.addSeparator();
		mnFile.add( makeMenuItems( "  닫 기(C)", "close", KeyEvent.VK_C, true, KeyEvent.VK_2) );
		mnFile.addSeparator();
		mnFile.add( makeMenuItems( "  종 료(X)", "exit", KeyEvent.VK_X, true, KeyEvent.VK_3) );
		mnHelp.add( makeMenuItems( 
				" 프로젝트 정보(I) ", "about", KeyEvent.VK_A, true, 0 ) );
	}
}








